package com.sky.service.user.Impl;

import com.sky.context.BaseContext;

import com.sky.exception.ShopIDNotNULLException;
import com.sky.mapper.user.ShoppingCartMapper;
import com.sky.pojo.Merchant;
import com.sky.service.user.UserDeliveryTimeService;
import com.sky.utils.MapUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 计算送达时间
 */
@Service
@Slf4j
public class UserDeliveryTimeServiceImpl implements UserDeliveryTimeService {

    @Autowired
    private ShoppingCartMapper cartMapper;


    /**
     * 预计送达时间=当前时间+菜品制作时间+配送时间+预留时间（10分钟）
     * @param
     */

    @Override
    public LocalDateTime getUserDeliveryTime(Integer shopId, String address) {
        log.info("业务逻辑层开始我的地址{}", address);
        // 规则：预计送达时间 = 当前时间 + 菜品制作时间 + 配送时间 + 预留时间(10 分钟)

        // 获取菜品制作时间，购物车中每项菜品的制作数据
        Integer makeTime = cartMapper.getMakeTime(BaseContext.getCurrentId());
        log.info("菜品耗时: {}", makeTime);
        log.info("商家shopId是：{}", shopId);

        //计算配送地址和商家地址之间的配送时间（1.查询商家地址）
        Merchant merchant = cartMapper.getById(shopId);
        String shopAddress = merchant.getShopAddress();//商家地址
        if(shopAddress==null){
            throw new ShopIDNotNULLException("找不到商家信息");
        }
        log.info("商家地址{}", shopAddress);
        log.info("业务逻辑层我的地址{}", address);
        Map<String, String> map = MapUtils.gaodeTwoPointCostDistanceAndTimeByAddress(
                shopAddress, address);
        String duration = map.get("duration");  //启用map工具类中区拿秒
        log.info("业务逻辑层计算出配送时间的秒：{}", duration);

        // 计算总共耗时（秒）   制作        商家距离司机          预留时间10分钟
        Long time = makeTime * 60 + Long.parseLong(duration) + 600;
        LocalDateTime localDateTime = LocalDateTime.now().plusSeconds(time);
        log.info("业务逻辑层计算出总耗时：{}", localDateTime);
        return localDateTime;

    }
}
